<script>
	//1、引入下载的三个 sdk npm i  cos-wx-sdk-v5 tim-wx-sdk aegis-mp-sdk
	import TIM from 'tim-wx-sdk';
	import COS from 'cos-wx-sdk-v5';
	import Aegis from 'aegis-mp-sdk';

	//2、把 uniapp tuikit 里面的 debug static utils polyfill
	import logger from './utils/logger'; // app.js

	const aegis = new Aegis({
		id: 'iHWefAYqKznuxWjLnr', // 项目key
		reportApiSpeed: true, // 接口测速
	});

	uni.$aegis = aegis

	//引入签名代码
	import {
		genTestUserSig
	} from './debug/GenerateTestUserSig.js';

	export default {
		data(){
			return{
				datalist:[]
			}
		},

		onLaunch: function() {
			console.log('App Launch')
			//调用签名函数拿到appid
			const SDKAppID = genTestUserSig('').sdkAppID;


			uni.$aegis.reportEvent({
				name: 'onLaunch',
				ext1: 'onLaunch-success',
				ext2: 'uniTuikitExternal',
				ext3: `${SDKAppID}`,
			})
			uni.setStorageSync(`TIM_${SDKAppID}_isTUIKit`, true);

			// 得到 我们的 tim 实例对象，到时候通过该实例对象 login 完成登录后，触发 ready 事件，然后在ready 后，
			// 做回话列表，发送消息等操作
			uni.$TUIKit = TIM.create({
				SDKAppID: SDKAppID
			});

			uni.$TUIKit.registerPlugin({
				'cos-wx-sdk': COS
			});


			// uni 上面挂载了一些对象 Vue.prototype.tim = tim;
			uni.$TUIKitTIM = TIM;
			uni.$TUIKitEvent = TIM.EVENT;
			uni.$TUIKitVersion = TIM.VERSION;
			uni.$TUIKitTypes = TIM.TYPES; // 监听系统级事件

			uni.$resetLoginData = this.resetLoginData();

			// 事件的监听 SDK_READY
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady);

			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady);
			uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut);
			uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError);
			uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange);
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload);

		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		},
		globalData: {
			// userInfo: userID userSig token phone
			userInfo: null,
			// 个人信息
			userProfile: null,
			isTUIKit: true,
			headerHeight: 0,
			statusBarHeight: 0,
			SDKAppID: genTestUserSig('').sdkAppID
		},
		methods: {
			// TODO:
			resetLoginData() {
				this.globalData.expiresIn = '';
				this.globalData.sessionID = '';
				this.globalData.userInfo = {
					userID: '',
					userSig: '',
					token: '',
					phone: ''
				};
				this.globalData.userProfile = null;
				logger.log(`| app |  resetLoginData | globalData: ${this.globalData}`);
			},
			onTIMError() {},
			onSDKReady({
				name
			}) {
				// 冷启动，有点类似第一次启动小程序
				const isSDKReady = name === uni.$TUIKitEvent.SDK_READY ? true : false
				// 1、小程序成功登录后，触发 ready 事件，然后我们在 ready 事件里面做一个全局共享的数据放置在vuex里面。
				this.$u.vuex('isImReady', true);
				
				//获取用户信息
				
					// let self = this;
					// self.$u.api.user_info({}).then(res => {
					// 	self.datalist = res.data;
					// 	console.log(1451,self.datalist)
					// 	// console.log('获取用户信息',self.datalist);
						
					// 	//2、完成用户的资料更新到im 系统里面，直接从 vuex 里面获取
					// 	uni.$TUIKit.updateMyProfile({
					// 		nick: this.self.datalist.nickname,
					// 		avatar:this.self.datalist.avatar,
					// 	}).then(imResponse => {
					// 		console.log("用户的im资料更新完成======",imResponse);
					// 	})
					// 	.catch(() => {
					// 		console.log("用户的im资料更新失败=======",imResponse);
					// 	});
						
					// });
				
				
				// let self = this;
				this.$u.api.user_info({}).then(res => {
					this.datalist = res.data;
					console.log('=========获取用户信息',this.datalist)
					// console.log('获取用户信息',self.datalist);
					
					//2、完成用户的资料更新到im 系统里面，直接从 vuex 里面获取
					uni.$TUIKit.updateMyProfile({
						nick: this.datalist.nickname,
						avatar:this.datalist.avatar,
					}).then(imResponse => {
						console.log("用户的im资料更新完成======",imResponse);
					})
					.catch(() => {
						console.log("用户的im资料更新失败=======",imResponse);
					});
					
					uni.$emit('isSDKReady', {
						isSDKReady: true
					});
					
				});
				
				// //2、完成用户的资料更新到im 系统里面，直接从 vuex 里面获取
				// uni.$TUIKit.updateMyProfile({
				// 	nick: this.userInfo.nickname,
				// 	avatar:this.userInfo.avatar,
				// }).then(imResponse => {
				// 	console.log("用户的im资料更新完成======",imResponse);
				// })
				// .catch(() => {
				// 	console.log("用户的im资料更新失败=======",imResponse);
				// });


				// uni.$emit('isSDKReady', {
				// 	isSDKReady: true
				// });
			},
			onNetStateChange() {},
			onSDKReload() {},
			onSdkNotReady() {
				console.log('退出的时候，触发 im 状态置为 false');
				// 退出的时候，触发 im 状态置为 false
				this.$u.vuex('isImReady', false);
			},
			onKickedOut() {
				uni.showToast({
					title: '您被踢下线',
					icon: 'error'
				});
				uni.navigateTo({
					url: './pages/TUI-Login/login'
				});
			}
		}
	}
</script>

<style lang="scss">
	@import "utils/base.css";
	/*每个页面公共css */
	@import "uview-ui/index.scss";
</style>
